package com.mj.listen3.链表;

/**
 * https://leetcode-cn.com/problems/reverse-linked-list/
 */
public class _206_反转单向链表 {
    public ListNode reverseList(ListNode head) {
        // 记录下一个节点
        ListNode next = null;
        // 记录前一个节点
        ListNode pre = null;
        while (head != null) {
            // 记录下一个节点
            next = head.next;
            // 当前节点的next指向前面的节点
            head.next = pre;
            // pre指针移动，指向当前节点head(当前节点将会成为下一轮的pre)
            pre = head;
            // head往后移动到下一个节点
            head = next;
        }
        return pre;
    }

    // MJ的解法
    public ListNode reverseList2(ListNode head) {
        if (head == null || head.next == null) {
            return head;
        }
        ListNode newHead = null;
        while (head != null) {
            // 记录下一个节点(待会head要往这个节点移动)
            ListNode temp = head.next;
            // 指针往前指
            head.next = newHead;
            // 新的头节点
            newHead = head;
            // 指向下一个节点
            head = temp;
        }
        return newHead;
    }
}
